package VIEWS;

import java.awt.BorderLayout;
import java.awt.EventQueue;
import java.awt.Font;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.border.EmptyBorder;
import javax.swing.table.DefaultTableModel;

import CONTROLLERS.HoaDonControllers;
import CONTROLLERS.UsersControllers;
import ModelEntityFW.HoaDonEntitys;
import ModelEntityFW.UserEntitys;
import Ultils.Controls;

import javax.swing.JButton;
import javax.swing.JTable;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.awt.event.ActionEvent;
import javax.swing.ImageIcon;

public class frmHoaDon extends JFrame {

	private JPanel contentPane;
	private JTable jTLoadDataU;
	private static Connection m_objConnection;
	private HoaDonControllers m_objHoaDonController;
	private static UserEntitys m_objSecurityContext;
	private static frmHoaDon fhoadon;
	private DefaultTableModel objDTM;
	private HoaDonEntitys m_objHoaDonEntity;
	private static boolean bFlag = false;

	/**
	 * Launch the application.


	/**
	 * Create the frame.
	 */
	public frmHoaDon(Connection objConnection, UserEntitys objSecurity) {
		// Khởi tạo đối tượng
		m_objConnection = objConnection;
		m_objSecurityContext = objSecurity;
		m_objHoaDonEntity = new HoaDonEntitys();
		objDTM = new DefaultTableModel();
		jTLoadDataU = new JTable();
		setTitle("Quản lý hóa đơn");
		setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
		setBounds(100, 100, 845, 511);
		contentPane = new JPanel();
		contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
		setContentPane(contentPane);

		JButton btnThemHD = new JButton("Thêm hóa đơn");
		btnThemHD.setIcon(new ImageIcon(frmHoaDon.class.getResource("/images/book_edit.png")));
		btnThemHD.setBounds(10, 11, 145, 39);
		btnThemHD.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				m_objHoaDonEntity.setbFlag(false);
				frmThemHoaDon frmThem = new frmThemHoaDon(m_objConnection, m_objSecurityContext, m_objHoaDonEntity);
				frmThem.setVisible(true);
			}
		});
		contentPane.setLayout(null);
		contentPane.add(btnThemHD);

		JButton btnCapNhat = new JButton("Cập nhật");
		btnCapNhat.setIcon(new ImageIcon(frmHoaDon.class.getResource("/images/editgv2.png")));
		btnCapNhat.setBounds(173, 11, 108, 39);
		btnCapNhat.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				// 1. Kiểm tra trạng thái Entity
				if (m_objHoaDonEntity == null) {
					m_objHoaDonEntity = new HoaDonEntitys();
				}
				// 2. Thiết lập thông tin cho Entity
				if (bFlag) {
					m_objHoaDonEntity.setbFlag(true);
					m_objHoaDonEntity.setHoaDonID(String.valueOf(objDTM.getValueAt(jTLoadDataU.getSelectedRow(), 0)));
					m_objHoaDonEntity.setNgayTaoHD(String.valueOf(objDTM.getValueAt(jTLoadDataU.getSelectedRow(), 1)));
					m_objHoaDonEntity.setTongTien(Float.parseFloat(String.valueOf(objDTM.getValueAt(jTLoadDataU.getSelectedRow(), 2))));
					m_objHoaDonEntity.setGTGT(Float.parseFloat(String.valueOf(objDTM.getValueAt(jTLoadDataU.getSelectedRow(), 3))));
					m_objHoaDonEntity.setBHYT(Float.parseFloat(String.valueOf(objDTM.getValueAt(jTLoadDataU.getSelectedRow(), 4))));
					m_objHoaDonEntity.setSoTienThanhToan(Float.parseFloat(String.valueOf(objDTM.getValueAt(jTLoadDataU.getSelectedRow(), 5))));
					m_objHoaDonEntity.setCTBA_ID(Integer.parseInt(String.valueOf(objDTM.getValueAt(jTLoadDataU.getSelectedRow(), 6))));
					m_objHoaDonEntity.setLoaiBH(String.valueOf(objDTM.getValueAt(jTLoadDataU.getSelectedRow(), 7)));

				    frmThemHoaDon fThem = new frmThemHoaDon(m_objConnection, m_objSecurityContext, m_objHoaDonEntity);
				    fThem.setLocation(400, 200);
					fThem.setVisible(true);
					
					dispose();
				} else {
					JOptionPane.showMessageDialog(getParent(), "Yêu cầu chọn thông tin cần cập nhật", "Thông báo",
							JOptionPane.WARNING_MESSAGE);
				}
			}
		});
		contentPane.add(btnCapNhat);

		JButton btnXoa = new JButton("Xóa");
		btnXoa.setIcon(new ImageIcon(frmHoaDon.class.getResource("/images/6_3.png")));
		btnXoa.setBounds(302, 11, 104, 39);
		btnXoa.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				int opt = JOptionPane.showConfirmDialog(getParent(), "Bạn có chắc chắn muốn xóa dữ liệu này?",
						"Thông báo", JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE, null);
				if (opt == 0) {
					// Yes
					String hoaDonID = String.valueOf(objDTM.getValueAt(jTLoadDataU.getSelectedRow(), 0));

					boolean bResult = false;
					try {
						HoaDonEntitys objEntity = new HoaDonEntitys();
						objEntity.setHoaDonID(hoaDonID);
						bResult = m_objHoaDonController.ExecOfDeleteElement(objEntity);
					} catch (Exception e) {
						JOptionPane.showMessageDialog(getParent(), "Lỗi xóa hóa đơn!", "Thông báo",
								JOptionPane.ERROR_MESSAGE);
					}

					if (bResult) {
						JOptionPane.showMessageDialog(getParent(), "Xóa tài khoản thành công!", "Thông báo",
								JOptionPane.ERROR_MESSAGE);

						// Thực thi hiển thị dữ liệu
						LoadData(true);
					} else {
						JOptionPane.showMessageDialog(getParent(), "Xóa hóa đơn thành công!", "Thông báo",
								JOptionPane.ERROR_MESSAGE);
					}
				}
			}
		});
		contentPane.add(btnXoa);

		JButton btnGhixuongfile = new JButton("Ghi xuống file");
		btnGhixuongfile.setIcon(new ImageIcon(frmHoaDon.class.getResource("/images/save.png")));
		btnGhixuongfile.setBounds(581, 11, 131, 39);
		btnGhixuongfile.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				Object[] options = { "XML File", "JSON File", "Hủy bỏ" };
				int n = JOptionPane.showOptionDialog(getParent(), "Hãy chọn loại File bạn muốn ghi: ",
						"Chọn thể lại File", JOptionPane.YES_NO_CANCEL_OPTION, JOptionPane.QUESTION_MESSAGE, null,
						options, options[1]);
				if (n == 0) {

					JOptionPane.showMessageDialog(getParent(), "Ghi XML thành công!");
				} else if (n == 1) {
					JOptionPane.showMessageDialog(getParent(), "Ghi JSon thành công!");
				}
			}
		});
		contentPane.add(btnGhixuongfile);

		JButton btnDong = new JButton("Đóng");
		btnDong.setIcon(new ImageIcon(frmHoaDon.class.getResource("/images/cancel.gif")));
		btnDong.setBounds(730, 11, 89, 39);
		btnDong.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				dispose();
			}
		});
		contentPane.add(btnDong);
		
		JButton btnLamtuoi = new JButton("Làm tươi");
		btnLamtuoi.setIcon(new ImageIcon(frmHoaDon.class.getResource("/images/lamtuoi32.png")));
		btnLamtuoi.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
			}
		});
		btnLamtuoi.setBounds(427, 11, 138, 39);
		contentPane.add(btnLamtuoi);

		JScrollPane scrollPane = new JScrollPane();
		scrollPane.setBounds(10, 60, 809, 373);
		contentPane.add(scrollPane);

		jTLoadDataU = new JTable();
		jTLoadDataU.addMouseListener(new MouseAdapter() {
			@Override
			public void mouseClicked(MouseEvent arg0) {
				bFlag = true;
			}
		});
		jTLoadDataU.setFont(new Font("Cambria", Font.PLAIN, 13));
		jTLoadDataU.setFillsViewportHeight(true);
		jTLoadDataU.setColumnSelectionAllowed(true);
		jTLoadDataU.setCellSelectionEnabled(true);
		jTLoadDataU.setBorder(null);
		scrollPane.setViewportView(jTLoadDataU);

		// Hiển thị dữ liệu lên JTable
		LoadData(true);

	}

	private void LoadData(boolean typeData) {
		// TODO Auto-generated method stub
		try {
			// 1. Kiểm tra trạng thái kết nối
			if (!m_objConnection.isClosed()) {
				ResultSet objRS = null;
				if (typeData) {
					// 2. Thực thi nhận ve tập bản ghi Users
					if (m_objHoaDonController == null) {
						m_objHoaDonController = new HoaDonControllers(m_objConnection, m_objSecurityContext);
					}
					try {
						objRS = m_objHoaDonController.ExecOfGetElements();
					} catch (Exception e) {
						JOptionPane.showMessageDialog(getParent(), "Err: " + e, "Thông báo", JOptionPane.ERROR_MESSAGE);
					}
				}
				// 3. Khai báo khởi tạo đối tượng
				Controls objControls = new Controls();

				// 4. Thực thi phương thức getModels để nhận ve
				// DefaulTableModels
				try {
					objDTM = objControls.getModels(objRS);
				} catch (Exception e) {
					System.out.println(e.getMessage());
				}
				jTLoadDataU.setModel(objDTM);

			} else {
				JOptionPane.showMessageDialog(getParent(), "Không kết nối được với CSDL!", "Thông báo",
						JOptionPane.ERROR_MESSAGE);
			}
		} catch (SQLException ex) {
			JOptionPane.showMessageDialog(getParent(), "Có lỗi xảy ra. Chi tiết: " + ex.getMessage(), "Thông báo",
					JOptionPane.ERROR_MESSAGE);
		}
	}
}
